package com.csw.spark

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Demo01WordCount {
  def main(args: Array[String]): Unit = {

    /**
      * 创建spark运行环境
      */
    //配置文件对象
    val conf = new SparkConf()

    //会在yarn中显示的名称
    conf.setAppName("wc")

    //运行方式:local 本地运行
    conf.setMaster("local")

    //构建spark 上下文对象
    val sc: SparkContext = new SparkContext(conf)


    /**
      * RDD: 弹性的分布式数据集（可以看作是scala中的一个集合来使用）
      *
      */
    //1、读取数据
    val linesRDD: RDD[String] = sc.textFile("spark/data/words.txt")

    //2、将每一行的数据拆分出来
    //在spark中数据处理的方法一般称为算子，算子处理完了之后会返回一个新的RDD
    val wordsRDD: RDD[String] = linesRDD.flatMap(a => a.split(","))

    //3、按照单词进行分组
    val groupRDD: RDD[(String, Iterable[String])] = wordsRDD.groupBy(a => a)

    //4、统计单词的数量
    val countRDD: RDD[String] = groupRDD.map(kv => {
      //单词的名称
      val word: String = kv._1

      //一个名称组内所有单词
      val value: Iterable[String] = kv._2

      //单词的数量
      val count: Int = value.size

      //返回
      word + "," + count
    })

    //保存数据
    countRDD.saveAsTextFile("spark/data/count")
  }
}
